Bloque 8.1 · 35 min

Vistas

Una vista (VIEW) es una tabla virtual basada en una consulta SQL.

No almacena datos físicamente. Guarda únicamente la lógica de la consulta.

Ventajas

  • Simplifican consultas complejas.
  • Ocultan datos sensibles.
  • Facilitan reporting.
  • Mejoran abstracción.
  • Permiten control de acceso.

Crear una vista

CREATE VIEW vista_clientes AS
SELECT nombre, ciudad
FROM clientes
WHERE activo = 1;

Uso

SELECT * FROM vista_clientes;
Las vistas funcionan como ventanas filtradas hacia tablas reales.
Una vista NO almacena datos en disco.
¿Qué es una vista?
Bloque 8.2 · 40 min

Transacciones

Una transacción agrupa varias operaciones SQL como una única unidad indivisible.

Objetivo

  • Evitar inconsistencias.
  • Garantizar integridad.
  • Controlar errores.
  • Proteger operaciones críticas.

Ejemplo

START TRANSACTION;

UPDATE cuentas
SET saldo = saldo - 100
WHERE id = 1;

UPDATE cuentas
SET saldo = saldo + 100
WHERE id = 2;

COMMIT;

COMMIT

Confirma cambios definitivamente.

ROLLBACK

ROLLBACK;

Deshace operaciones ante errores.

Las transacciones son esenciales en banca y e-commerce.
¿Qué hace COMMIT?
Bloque 8.3 · 45 min

Propiedades ACID

ACID define el comportamiento seguro de las transacciones.

Letra Significado
A Atomicidad
C Consistencia
I Aislamiento
D Durabilidad

Atomicidad

Todo o nada.

Consistencia

Los datos pasan de un estado válido a otro válido.

Aislamiento

Las transacciones paralelas no interfieren.

Durabilidad

Los cambios confirmados sobreviven a fallos.

Niveles de aislamiento

SET TRANSACTION ISOLATION LEVEL
READ COMMITTED;
SERIALIZABLE es muy seguro pero puede bloquear muchas operaciones.
¿Qué significa Atomicidad?
Bloque 8.4 · 50 min

Cursores y procedimientos almacenados

Cursores

Permiten recorrer resultados fila a fila.

Fases principales

  • DECLARE CURSOR
  • FETCH
  • CLOSE

Procedimientos almacenados

Bloques SQL reutilizables almacenados en el servidor.

Ejemplo

DELIMITER //

CREATE PROCEDURE aumentar_precios(
IN porcentaje DECIMAL(5,2)
)

BEGIN

 UPDATE productos
 SET precio = precio * (1 + porcentaje / 100);

END //

DELIMITER ;

Ejecución

CALL aumentar_precios(10);

Parámetros

Tipo Descripción
IN Entrada
OUT Salida
INOUT Ambos
Los cursores suelen ser más lentos que operaciones SQL en bloque.
¿Qué ejecuta un procedimiento almacenado?
Bloque 8.5 · 40 min

Caso de estudio de una tienda online

Una tienda online necesitaba automatizar el control de stock.

Problema

  • Productos agotados seguían apareciendo disponibles.
  • Clientes realizaban pedidos inválidos.
  • Había revisiones manuales constantes.

Solución

CREATE PROCEDURE actualizar_stock()

BEGIN

 UPDATE productos
 SET estado = 'agotado'
 WHERE cantidad = 0;

END;

Ejecución automática

CALL actualizar_stock();

Resultados

  • Menos errores.
  • Automatización total.
  • Mayor satisfacción del cliente.
  • Menos carga técnica.
Un procedimiento sencillo puede ahorrar horas de trabajo diario.
¿Qué hacía actualizar_stock?
Bloque 8.6 · 45 min

Triggers

Un trigger es un bloque SQL que se ejecuta automáticamente ante un evento.

Eventos posibles

  • INSERT
  • UPDATE
  • DELETE

Tipos

Tipo Momento
BEFORE Antes del evento
AFTER Después del evento

Palabras clave

  • NEW → valores nuevos.
  • OLD → valores antiguos.

Ejemplo

CREATE TRIGGER validar_precio
BEFORE INSERT ON productos

FOR EACH ROW

SET NEW.precio = ABS(NEW.precio);
Los triggers son muy usados en auditoría y validación automática.
¿Cuándo se ejecuta un AFTER trigger?
Bloque 8.7 · 40 min

Eventos programados

Los eventos programados permiten ejecutar tareas automáticas en momentos concretos.

Funcionamiento

Equivalen a cron jobs internos de MySQL.

Ejemplo

CREATE EVENT limpiar_temp

ON SCHEDULE EVERY 1 DAY

DO

DELETE FROM temporal
WHERE fecha < NOW() - INTERVAL 7 DAY;

Usos habituales

  • Limpieza automática.
  • Actualización de estadísticas.
  • Procesos nocturnos.
  • Replicación interna.
  • Inventario automático.
Los eventos permiten que la base de datos "actúe sola".
¿Qué crea un evento programado?
Bloque 8.8 · 50 min

Práctica aplicada

Empresa logística

Una empresa de transporte necesitaba notificar entregas automáticamente.

Problema

  • Notificaciones tardías.
  • Errores manuales.
  • Clientes desinformados.

Trigger implementado

CREATE TRIGGER notificar_entrega

AFTER UPDATE ON pedidos

FOR EACH ROW

IF NEW.estado = 'entregado' THEN

 INSERT INTO notificaciones
 (id_pedido, fecha, mensaje)

 VALUES
 (NEW.id_pedido, NOW(), 'Pedido entregado');

END IF;

Beneficios

  • Automatización total.
  • Notificaciones en tiempo real.
  • Menos errores humanos.
  • Mayor satisfacción.
FOR EACH ROW ejecuta el trigger para cada fila afectada.
¿Qué hace NEW?
Bloque 8.9 · 35 min

Consejos finales

Buenas prácticas

  • Usa vistas para proteger datos.
  • Documenta procedimientos.
  • Evita cursores innecesarios.
  • Controla duración de transacciones.
  • Monitoriza eventos y triggers.
  • Realiza backups frecuentes.

Comandos útiles

SHOW PROCEDURE STATUS;

SHOW EVENTS;

SHOW TRIGGERS;

Errores comunes

  • Triggers encadenados.
  • Transacciones demasiado largas.
  • Abusar de SERIALIZABLE.
  • No documentar automatizaciones.
Una automatización mal documentada puede convertirse en un gran problema meses después.
¿Qué comando muestra triggers?